package oracle;

import com.baomidou.mybatisplus.enums.FieldFill;
import com.kerns.generator.config.*;
import com.kerns.generator.AutoGenerator;
import com.kerns.generator.config.po.TableFill;
import com.kerns.generator.config.rules.DbType;
import com.kerns.generator.config.rules.NamingStrategy;
import com.kerns.generator.engine.VelocityTemplateEngine;

import java.util.ArrayList;
import java.util.List;

/**
 * 创建人:kerns
 * 创建时间: 2019/8/21 4:47 PM
 **/
public class SinglemodeBuilder {

    public static void builder() {
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setProjectPath("/work/java/kerns-generator/geratetest");
        //项目路径
//        gc.setProjectPath("/work/java/tya-front-service/");
        //设置文件是否覆盖
        gc.setFileOverride(false);
        gc.setActiveRecord(true);
        gc.setOpen(false);
        // XML 二级缓存
        gc.setEnableCache(false);
        //BaseResultMap 返回
        gc.setBaseResultMap(true);// XML ResultMap
        //Base_Column_List 显示
        gc.setBaseColumnList(true);
        gc.setAuthor("kerns");
        mpg.setGlobalConfig(gc);
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.ORACLE);
        dsc.setDriverName("oracle.jdbc.driver.OracleDriver");
        dsc.setUsername("yax");
        dsc.setPassword("ctgu3213_");
        dsc.setUrl("jdbc:oracle:thin:@139.9.227.144:1521:xe");
        mpg.setDataSource(dsc);
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        // 表名生成策略
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setTablePrefix("T");
        //是否反射表字段属性
        strategy.entityTableFieldAnnotationEnable(true);
        //逻辑删除字段
        strategy.setLogicDeleteFieldName("isDelete");
        // 字段名生成策略
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setSkipView(true);
        List<TableFill> list = new ArrayList<TableFill>();
        list.add(new TableFill("add_time", FieldFill.DEFAULT));
        strategy.setTableFillList(list);
        mpg.setStrategy(strategy);
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("front");
        pc.setParent("com.thy");
        pc.setEntity("entity");
        pc.setMapper("repository");
        pc.setXml("mapper");
        mpg.setPackageInfo(pc);
        // 自定义模板配置
        TemplateConfig tc = new TemplateConfig();
        tc.setController("/template/data/DataController.java");
        tc.setEntity("/template/data/DataEntity.java");
        tc.setMapper("/template/data/DataDAO.java");
        tc.setDto("/template/data/DataDTO.java");
        tc.setService("/template/data/DataService.java");
        tc.setXml(null);
        tc.setReq(null);
        tc.setServiceImpl("/template/data/DataServiceImpl.java");
        mpg.setTemplate(tc);
        mpg.setTemplateEngine(new VelocityTemplateEngine());
        mpg.execute();
    }

    public static void main(String[] args) {
        try {
            builder();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
